const {
	classesModel,
	model
} = require('../model/classes.js');
const md5 = require('md5');
class Classes {
	/*
	展示用户信息
	 */
	async list(req, res) {
		let {
			pageSize,
			currentPage,
			field,
			fieldVal
		} = req.query;
		pageSize = parseInt(pageSize) > 0 ? parseInt(pageSize) : 10;
		currentPage = parseInt(currentPage) > 0 ? parseInt(currentPage) : 1;
		const offset = (currentPage - 1) * pageSize;
		//模糊查询条件
		let where = {};
		if (field && fieldVal) {
			where[field] = {
				$like: `%${fieldVal}%`
			};
		}
		//计算总的记录条数
		let total = await classesModel.findOne({
				where,
				attributes: [[model.fn('COUNT', model.col('id')), 'count']],
				raw: true
			});
		total = total.count;
		//分页查询
		const ret = await classesModel.findAll({
				where,
				offset,
				limit: pageSize
			}).catch((ret) => {
				res.status(404);
				res.send({
					error: '获取数据失败',
					data: null
				});
			});
		res.send({
			error: null,
			data: {
				total,
				currentPage,
				pageSize,
				rows: ret,
			}
		});
	}

	//通过ID获取数据
	async one(req, res) {
		const id = req.params.id;
		const ret = await classesModel.findOne({
				raw: true,
				where: {
					id
				}
			}).catch(() => {
				res.status(404)
				res.send({
					error: '数据查询失败',
					data: null
				})
				return
			})
			res.send({
				error: null,
				data: ret
			});
	}

	/*
	添加
	 */
	add(req, res) {
		classesModel.create(req.body).then((ret) => {
			res.status(200)
			res.send(ret)
		}).catch((ret) => {
			res.status(404)
			res.send({
				error: null,
				data: ret.errors[0].message
			})
		});
	}
	/*
	更新
	 */
	edit(req, res) {
		const id = req.params.id;
		if (!/^[0-9]+$/.test(id)) {
			res.status(404);
			res.send({
				error: '路由参数必须是数字',
				data: null
			})
			return;
		}
		classesModel.update(req.body, {
			where: {
				id: {
					$eq: id
				}
			}
		}).then((ret) => {
			res.status(200)
			res.send({
				error: null,
				data: '更新成功'
			})
		}).catch((ret) => {
			res.status(404);
			res.send({
				error: '更新失败',
				data: null
			})
		});
	}

	/*
	删除
	 */
	del(req, res) {
		const id = req.params.id;
		if (!/^[0-9]+$/.test(id)) {
			res.status(404);
			res.send({
				error: '路由参数必须是数字',
				data: null
			})
			return;
		}
		classesModel.destroy({
			where: {
				id: {
					$eq: id
				}
			}
		}).then((ret) => {
			res.status(200);
			res.send({
				error: null,
				data: '删除成功'
			})
		}).catch((ret) => {
			res.status(404);
			res.send({
				error: '删除失败',
				data: null
			})
		});
	}
	/*
	注册
	 */
	regist(req, res) {
		(new Classes).add(req, res)
	}
	/*
	判断某个字段的值是否存在
	 */
	async exists(req, res) {
		const {
			field,
			value
		} = req.params;
		let where = {}
		where[field] = value
			const ret = await classesModel.findOne({
				where,
			});
		if (ret) {
			res.send(true);
		} else {
			res.send(false)
		}
	}

}

module.exports = new Classes();
